from spk.core.framework import *
from spk.core.workspace import *
from spk.plugins import *

def _max_width_(prcnt_width:int = 75):
    '''调整 steamlit 页面显示宽度的比例，默认 75%'''
    max_width_str = f"max-width: {prcnt_width}rem;"
    st.markdown(f""" 
                <style> 
                .block-container{{{max_width_str}}}
                </style>    
                """, 
                unsafe_allow_html=True,
    )

if get('uuid') is None:
    plugin = st.sidebar.selectbox("插件选择", 
                          plugins,
                          format_func=lambda x: str(x.__doc__).split('\n')[0],
                          key="plugin")

    descript = '\n'.join(plugin.__doc__.split('\n')[1:])
    st.sidebar.markdown(f"""
#### 描述
        {descript}
        """)
        
    if st.sidebar.button("开始构建"):
        work(plugin)
        st.rerun()
    
        
    st.title('Welcome Spk Online Builder')
    st.markdown("""             
        基于 Spk 可扩展的在线构建平台，不保证其稳定性，目前正在完善中，欢迎反馈。
        """)

    st.markdown("""
        ### 快速开始
        1. 选择你需要的插件
        2. 点击左侧 `开始构建` 按钮，即可开始进行你的工作空间构建
        3. 点击 `刷新页面` 按钮，可以刷新页面，重新加载页面数据
        4. 点击 `清除工作空间` 按钮，可以清除工作空间，重新开始构建
        5. 点击页面 `下一步` 按钮，可移动动插件中设定好的构建流程
        6. 构建完成后，点击 `下载` 按钮，即可下载构建好的内容
        """)
    
    st.markdown("""
        #### 插件说明
        1. 插件位于 `spk/plugins` 目录下
        2. 插件需要继承 `SpkWorker` 类
        3. 插件需要重写 `__do_work__` 函数
        4. 插件就如您所想的那样，自由设计构建流程
        """)


if get("uuid") is not None:
    _max_width_()

    if st.sidebar.button("刷新页面"):
        st.rerun()
    
    def load():
        st.rerun()

    st.write(f'Step:{step()+1} / {len(steps())}')
    if len(steps()) != 0:
        st.subheader(work().__at__(step()))

        # 调用工作对象函数
        try:
            work().__do_work__()
        except Exception as e:
            st.error(e)
            pass
    
    if st.sidebar.button("清除工作空间", on_click=cleanwork):
        st.rerun()
    
# PS:
    # 本页面仅以加载 pages 里的页面调试使用
    # streamlit run welcome.py